package com.hmall.common.config;

import com.hmall.common.interceptors.UserInfoInterceptor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@ConditionalOnClass(DispatcherServlet.class)
/**
 * 1.首先 WebMvcConfigurer 是 spring-boot-starter-web 依赖里的包rg.springframework.web.servlet.config的类
 * 2.我们写的 MvcConfig 实现了这个接口WebMvcConfigurer，而这个类在common模块，而我们所有的模块都引入了common，如果想用MvcConfig，那就需要引入spring-boot-starter-web依赖
 * 3.而我们所有的微服务都是web服务，都引入了这个依赖，但gateway不是web服务，也没有引入这个依赖，gateway是非阻塞响应式的基于 webFlex的，就导致gateway不能使用MvcConfig，启动报错
 * 4.我们的需要是微服务web服务都用这个拦截器用于存放userId到threadLocal，gateway除外，gateway在他自己的过滤器去做登陆验证，所以这个类MvcConfig不在gateway里中使用
 * 5.已知所有web服务都引入spring-boot-starter-web那就必定有DispatcherServlet.class这个类，只需要根据条件判断，当有引入的有这个DispatcherServlet类就使用当前的拦截器，没有引入DispatcherServlet类就不使用这个拦截器，就可以在gateway时不加载它
 */
public class MvcConfig implements WebMvcConfigurer {
    //为什么要拦截器的配置，因为springmvc我们自己通过 implements HandlerInterceptor写的拦截器，需要交给spring才生效，所以需要写一个配置累告诉spring
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new UserInfoInterceptor());
    }
}
